#ifndef TASKRUNNABLE_H
#define TASKRUNNABLE_H


#include<QRunnable>
#include<QDebug>
#include<QEventLoop>
#include<QHostAddress>
#include "tcpsocket.h"

/**
 * @brief 实现线程池任务。
 * 继承自QObject是为了使用信号槽的connect
 */
class TaskRunnable :  public QObject ,public QRunnable
{
    Q_OBJECT

public:
    TaskRunnable(qintptr  socketDescriptor);
    ~TaskRunnable()
    {
        qDebug()<<"QRunnable对象销毁！"<<this;
    }
    /**
     * @brief run
     */
    virtual void run() override;

    /**
     * @brief send
     * @param array
     */
    void  sendData(const QByteArray & array);
    void close();

public slots:
    void   slotDisconnected();
    void   slotReadyRead();

signals:
    /**
     * @brief 信号，线程内发送，传递给外面的界面上显示
     */
    void  showMessage(const QString & info,  bool conn =true);

    //去触发QTcpSocket去发送数据
    void sigSend(const QByteArray & array);

private:

    //与客户端通讯的套接字对象
    //QTcpSocket *  socket;
    //自定义的类，为了能实现自己的槽函数
    TcpSocket *  socket;

    //系统底层套接字描述符（传统的网络编程 socket()函数返回的值）
    qintptr  socketDescriptor;
    //事件循环类
    QEventLoop * eventLoop;

};

#endif // TASKRUNNABLE_H
